<!doctype html>
<html lang="zh" class="h-100">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link rel="stylesheet" href="assets/css/bootstrap.min.css">
    <link rel="stylesheet" href="assets/css/style.css">

    <title>配置文件</title>
  </head>
  <body class="h-100">
  <div class="container-fluid h-100 p-2">
  	<h1>配置文件</h1>
  	<h5>1.  运行环境</h5>
  	应用的运行环境最常用的是开发、测试、生产三种环境，因此beyod也内置了支持，以便于实现基于运行环境的配置特性。  
  	<br>APP_ENV环境变量指明了运行环境，可在系统环境变量中配置为dev, test, prod, 分别代表开发、测试、生产环境。   
  	<br>如果没有配置，则默认为dev环境。  <br>每种运行环境中，部分配置参数肯定不同，因此我们引入运行环境相关配置和全局配置。</p>
  	<p>另请参阅 <a href="config-env.html">配置运行环境变量</a></p>
  	
  	<h5>2. 配置文件</h5>
  	config/main.php 全局配置文件  
  	<br>config/(dev|test|prod)/main.php  运行环境相关的配置  
  	<br>配置文件加载时，将环境相关的配置项与全局配置项合并后运行。
  	<br>绝大多数配置项使用yii风格的组件化配置，由组件名称，组件类，类的属性组成。  
  	<br>每个组件的配置项，就对应了组件类的公共属性或setter方法。</p><p>config/main.php</p>
  	<pre><code>&lt;?php

use yii\helpers\Markdown;

$config = [
    'id' =&gt; 'beyod',
    'basePath' =&gt; dirname(__DIR__).'/app', //指定应用根目录为app
    'bootstrap' =&gt; ['log'], //yii框架需要
    'language' =&gt; 'zh-CN',  //中文
    'timeZone' =&gt; 'PRC', //中国时区
    'enableCoreCommands' =&gt; false, //不加载yii的其它命令
    
    //php beyod.php server/start 实际上就是调用了以下控制器。
    'controllerMap' =&gt; [
        'server' =&gt; [
            'class' =&gt; 'beyod\ServerController',
         ]
    ],
    
    //组件配置
    'components' =&gt; [
        //server组件表示当前服务实例，名称必须为server
        'server' =&gt; [
            'class' =&gt; 'app\MyServer', //表示使用app\MyServer自定义类实现服务实例，必须从beyoio\Server继承
            'server_id' =&gt; 1, //server实例id, 集群环境中，每个节点此值必须唯一。
            'pid_file' =&gt; '@runtime/beyod.pid', //指定pid文件路径 @runtime指向 app/runtime
            'worker_num' =&gt; 4, //工作进程数量，生产环境建议设置为CPU的2~4倍， windows下无效。
            'daemonize' =&gt; false, //是否以后台守护进程运行，windows下无效，当设置为false时，程序将在终端挂起不转入后台要运行，以便于调试
            'user' =&gt; 'nobody', //工作进程启动后的切换用户账号，可限制工作进程的越权系统访问，对保证系统安全性有极其重要作用。
            'group' =&gt; 'nobody', //同上，设置用户组
            'rlimit_nofile' =&gt; 65535, //设置单个进程打开的连接数和文件数，仅PHP 7+以上有效，其它版本中，需要手工调整Linux系统的rlimie_nofile参数至少为60000以上，以便能接受大量并发连接。
            'memory_limit' =&gt; '1024MB', //每个工作进程允许使用的内存上限，一旦超限将导致当前工作进程退出并重启(1GB)。
            
            //指定此服务实例每个进程中要监听的端口以及对应的parser/handler, 键名必须是listenners
            'listeners' =&gt; [
                //定义一个listenner，名称为text(名称可以自定义)
                'text' =&gt; [
                    'class' =&gt; 'beyod\Listener',//指定侦听器的类，你可以使用自定义的类
                    'listen' =&gt; 'tcp://0.0.0.0:7723', //监听tcp端口7723
                    'parser' =&gt; 'beyoio\dispatcher\Parser', //指定协议解析器
                    'handler' =&gt; 'beyoio\dispatcher\Handler' //指定网络事件处理器
                ],
                
                //同上，我们启动了一个集群分发器
                'dispatch' =&gt; [
                    'class' =&gt; 'beyod\Listener',
                    'listen' =&gt; 'tcp://0.0.0.0:7724',
                    'parser' =&gt; 'beyoio\dispatcher\Parser',
                    'handler' =&gt; 'beyoio\dispatcher\Handler'
                ],
                
                //这是一个http server配置
                'http' =&gt; [
                    'class' =&gt; 'beyod\Listener',
                    'listen' =&gt; 'tcp://0.0.0.0:7725',
                    'parser' =&gt; 'beyod\protocol\http\Parser',
                    'handler' =&gt; [
                        //指定此handler的类以及属性配置，熟悉Yii框架的对此不会陌生。
                        'class'=&gt;'beyod\protocol\http\Handler',
                        'gzip'=&gt;true,
                        'document_root' =&gt; dirname(__DIR__).'/webroot',
                        'callback' =&gt;[
                            '#\.md$#' =&gt; function($event, $req, $res, $path){
                                $res-&gt;body = Markdown::process(file_get_contents($path), 'gfm-comment');
                                return true;
                            },
                        ]
                    ]
                ],
                
                //这是一个websocket服务器，监听在7726端口
                'websocket' =&gt; [
                    'listen' =&gt; 'tcp://0.0.0.0:7726',
                    'handler' =&gt; [
                        'class' =&gt; 'app\ChatHandler',//使用我们自己的处理器
                    ],
                    
                    //指定协议解析器
                    'parser' =&gt; [
                        'class' =&gt; 'beyod\protocol\websocket\Parser',
                    ]
                ],
            ],
        ],
        
        //libevent的封装
        'eventLooper' =&gt; [
            'class' =&gt; 'beyod\event\Event',
        ],
        
        
        'errorHandler' =&gt; [
            'class'=&gt;'beyod\helpers\ErrorHandler',
        ],
        
        'db' =&gt; [
            'class' =&gt; 'yii\db\Connection',
            'dsn' =&gt; 'mysql:host=localhost;dbname=utf8;charset=utf8',
            'username' =&gt; '',
            'password' =&gt; '',
            'charset' =&gt; 'utf8',
        ],
        
        'cache' =&gt; [
            'class' =&gt; 'yii\caching\FileCache',
        ],
        
        
        //指定日志文件目标和参数
        'log' =&gt; [
            'traceLevel' =&gt; 0,
            'FlushInterval' =&gt; 1,
            'targets' =&gt; [
                'default' =&gt; [
                    'class' =&gt; 'beyod\helpers\FileTarget',
                    'logFile' =&gt; '@runtime/logs/beyod.warning.log',
                    'levels' =&gt; ['error', 'warning', 'info'],
                ],
                
                'debug' =&gt; [
                    'class' =&gt; 'beyod\helpers\FileTarget',
                    'logFile' =&gt; '@runtime/logs/beyod.debug.log',
                    'levels' =&gt; ['error', 'warning', 'info', 'trace'],
                ],
                
                //直接在控制台输出日志内容，调试时非常有用, 生产环境中应关闭。
                'console' =&gt; [
                    'class' =&gt; 'beyod\helpers\ConsoleTarget',
                    'logVars' =&gt; [],
                    'enabled' =&gt; APP_ENV === 'dev' || DIRECTORY_SEPARATOR === &quot;\\&quot;,
                    'exportInterval' =&gt;1,
                    'levels' =&gt; ['error', 'warning', 'info','trace'],
                ],
            ],
        ],
        
    ],
    'params' =&gt; [
        
    ],
];

return \yii\helpers\ArrayHelper::merge(
    $config, 
    require __DIR__.'/'.YII_ENV.'/'.basename(__FILE__)
);

</code></pre>  </div>
  <script src="assets/js/jquery.min.js"></script>
  <script src="assets/js/popper.min.js"></script>
  <script src="assets/js/bootstrap.min.js"></script>

<script>
$(function(){
  var url = self.location;
  parent.$('a').removeClass('font-weight-bold');
  parent.$('a[href="150.html"]').addClass('font-weight-bold');
});
</script>  
  
  </body>
</html>